Multi-processor systems are often used to speed up large computing tasks by splitting the tasks into portions which can be handled by different data processing units being able to communicate with each other. The different data processing units can then work in parallel on a computing task. The data processing units are often also referred to as central processing units (CPUs) or cores. That is, a multi-processor system is a computer system which has two or more CPUs/cores to which different processes can be assigned for execution. In the following, such data processing units are referred to as processors.
If a program is to be executed on a multi-processor system, there may be different code portions of the program which are assigned to different data processing units. For example, the task of the program may be the sharpening of a large digital image and different processing units of the multi-processor system may be assigned to perform this task for different sections of the digital image. The sharpening algorithm performed by a particular processing unit may require data from the environment of a particular pixel which is currently processed by the particular processing unit. In other words, data that lies within the section processed by one of the other processors may be needed by the particular processing unit. In such a case, there may be a write operation for a particular variable to be executed by a first processing unit and a read operation for the same particular variable to be executed by a second processing unit. In such a case, a data dependency exists within the program which requires a communication between the first and second processors to enable the data flow. For this purpose, some multi-processor compiler systems insert communication statements into the program to enable the communication between the first and second processors. However, inserting the communication statements at sub-optimal positions in the program at compile time can have a negative impact on the performance, power consumption, delay and/or resource requirements and result in poor execution of the program at runtime.